#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2023-09-12 21:32
# @Author : hard work
# @File    : snmp_get_utils.py
# @Description :
import time

from pysnmp.hlapi import *

from test_app_main.case_cfg import snmp_oid_cfg


def snmpv2_get(ip, community, oid, port=161):
    # varBinds是列表，列表中的每个元素的类型是ObjectType（该类型的对象表示MIB variable）
    errorindication, errorstatus, errorindex, varbinds = next(
        getCmd(SnmpEngine(),
               CommunityData(community),  # 配置community
               UdpTransportTarget((ip, port)),  # 配置目的地址和端口号
               ContextData(),
               ObjectType(ObjectIdentity(oid))  # 读取的OID
               )
    )
    # 错误处理
    if errorindication:
        print(errorindication)
        return False
    elif errorstatus:
        print('%s at %s' % (
            errorstatus,
            errorindex and varbinds[int(errorindex) - 1][0] or '?'
        )
              )
        return False
    # 如果返回结果有多行,需要拼接后返回
    result = ""
    for varBind in varbinds:
        result = result + varBind.prettyPrint()  # 返回结果！
    # 返回的为一个元组,OID与字符串结果
    return result.split("=")[0].strip(), result.split("=")[1].strip()


if __name__ == "__main__":
    ret = snmpv2_get('10.11.0.217', 'public', '1.3.6.1.2.1.2.2.1.7.17')
    print("^^^", ret)
    # for i in range(1, 21):
    #     for k, v in snmp_oid_cfg.get_port_status().items():
    #         ret = snmpv2_get('10.11.0.217', 'public', v.format(i))
    #         print(k + '=>', ret)

